home *** CD-ROM | disk | FTP | other *** search
/ DS-CD ROM 2 1993 August / DS CD-ROM 2.Ausgabe (August 1993).iso / programm / ds0256 / mdebug1.exe / A86.TXT < prev    next >
Text File  |  1992-07-25  |  8KB  |  329 lines

  1.  
  2.        Hinweise zur Konvertierung der A86-Quellcodes für andere Assembler
  3.        ──────────────────────────────────────────────────────────────────
  4.  
  5. Diese Datei enthält eine kurze Beschreibung der A86-spezifischen Features,
  6. die in den zu MDEBUG mitgelieferten Quelltexten benutzt werden.
  7.  
  8.  
  9. -  Quelltexte für den A86 müssen keinerlei 'Red tapes' enthalten
  10.    (z.B 'CODE SEGMENT ...', 'ASSUME ...', 'PROC NEAR', 'ENDP', etc.).
  11.  
  12.  
  13. -  Per Voreinstellung behandelt der A86 alle Konstanten ohne Formatangabe
  14.    als hexadezimal falls sie mit der Ziffer '0' beginnen und als dezimal
  15.    falls sie NICHT mit der Ziffer '0' beginnen.
  16.  
  17.    Binäre Konstanten werden mit dem Suffix 'xB' gekennzeichnet.
  18.  
  19.    Das Suffix 'h' kennzeichnet Konstanten explizit als hexadezimal und
  20.    das Suffix 'xD' kennzeichnet Konstanten explizit als dezimal.
  21.  
  22.    Beispiele:
  23.  
  24.          Konstante │ Format
  25.          ──────────┼────────────
  26.          012       │ hexadezimal
  27.          0CC       │ hexadezimal
  28.          300       │ dezimal
  29.          300h      │ hexadezimal
  30.          011xB     │ binär
  31.          044xD     │ dezimal
  32.  
  33.  
  34. -  Falls keine 'PROC'-Anweisungen vorhanden sind, sind RET-Befehle immer 
  35.    'RET NEAR'-Befehle. 'RET FAR'-Befehle müssen als 'RETF' kodiert werden.
  36.  
  37.  
  38. -  PUSH- und POP-Befehle können mehrere Operanden haben.
  39.    Beispiel:
  40.  
  41.          push ax,bx,cx
  42.  
  43.    wird übersetzt als
  44.  
  45.          push ax
  46.          push bx
  47.          push cx
  48.  
  49.    oder
  50.  
  51.          pop ds,es
  52.  
  53.    wird übersetzt als
  54.  
  55.          pop ds
  56.          pop es
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63. -  INC- und DEC-Befehle können einen zweiten Operanden für die Anzahl
  64.    der Inkrementierungen bzw. Dekrementierungen haben.
  65.    Beispiel:
  66.  
  67.          inc ax,2
  68.  
  69.    wird übersetzt als
  70.  
  71.          inc ax
  72.          inc ax
  73.  
  74.    oder:
  75.  
  76.          dec cx,3
  77.  
  78.    wird übersetzt als
  79.  
  80.          dec cx
  81.          dec cx
  82.          dec cx
  83.  
  84.  
  85. -  Zuweisungen von direkten Werten an Segment-Register sind möglich.
  86.    Beispiel:
  87.  
  88.          mov ds,040h
  89.  
  90.    wird übersetzt als
  91.  
  92.          push ax
  93.          mov ax,040h
  94.          mov ds,ax
  95.          pop ax
  96.  
  97.  
  98. -  Zuweisungen der Form 'mov segreg,segreg' sind ebenfalls möglich.
  99.    Beispiel:
  100.  
  101.          mov ds,cs
  102.  
  103.    wird übersetzt als
  104.  
  105.          push cs
  106.          pop ds
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113. -  Der A86 kennt lokale Bezeichner. Jeder Bezeichner, der mit einem
  114.    Buchstaben beginnt und dessen restliche Zeichen nur Ziffern sind,
  115.    ist ein lokaler Bezeichner. 
  116.    Beispiele: 
  117.  
  118.         L001:
  119.         L4  EQU CR
  120.         T005 PROC NEAR
  121.         M1 MACRO db 0 #EM
  122.  
  123.    Lokale Bezeichner können beliebig neu definiert werden.
  124.  
  125.    Der A86 verwendet immer die gerade definierten Werte für einen
  126.    lokalen Bezeichner.
  127.  
  128.    Beispiel:
  129.  
  130.         L0    EQU 040h ; <──────────────────────────────────────┐
  131.                                                                 │
  132.         mov ax,l0             ; verwendet die EQU-Konstante L0 ─┘
  133.  
  134.         mov bx,offset >l0     ; verwendet den Offset des Labels L0 ─┐
  135.                               ; (das Größerzeichen markiert eine    │
  136.                               ;  'Forward'-Referenz!)               │
  137.         ;┌──────────────────────────────────────────────────────────┘
  138.         l0:  ; <─────────────────────────────────────────┐
  139.             mov ax,4          ;                          │
  140.             jmp l0            ; springt zu diesem Label ─┘
  141.  
  142.             cmp cx,4
  143.             je >l0            ; das Größerzeichen vor einem lokalen
  144.                               ; Label markiert eine 'Forward'-Referenz,
  145.                               ; d.h. der Befehl springt zu diesem
  146.                               ; Label ──┐
  147.             ret               ;         │
  148.         l0:  ; <────────────────────────┘
  149.  
  150.  
  151. -  Forward-Referenzen sind, falls nichts anderes angegeben ist, immer
  152.    Referenzen auf Konstanten.
  153.    Beispiel:
  154.  
  155.         mov ax,ByteOffset     ; Falls 'ByteOffset' hier noch NICHT definiert
  156.                               ; ist, wird dieser Befehl vom A86 behandelt
  157.                               ; als
  158.                               ; 'MOV AX, Offset ByteOffset'
  159.  
  160.  
  161.  
  162.  
  163. -  Zur expliziten Angabe des Formats einer Variablen können die Buchstaben
  164.    B, W und D angegeben werden.
  165.    Beispiel:
  166.  
  167.         MOV B[45h],12h  entspricht: MOV BYTE PTR [45h],12h
  168.         MOV W[1234],0   entspricht: MOV WORD PTR [1234],0
  169.         LDS D[05678]    entspricht: LDS DWORD PTR [05678]
  170.  
  171.  
  172. -  Der A86 erlaubt auch folgende Konstruktionen:
  173.  
  174.          cmp ax,4
  175.          IF e jmp Ende
  176.  
  177.    wird übersetzt als:
  178.  
  179.          cmp ax,4
  180.          jne label1
  181.          jmp Ende
  182.        Label1:
  183.  
  184.    oder:
  185.  
  186.          cmp ax,4
  187.          IF ne mov ax,0
  188.  
  189.    wird übersetzt als:
  190.  
  191.          cmp ax,4
  192.          jne label1
  193.          mov ax,0
  194.        label1:
  195.  
  196.  
  197. -  Als Ziel für einen Sprung kann auch 'RET' angegeben werden.
  198.    Beispiel:
  199.  
  200.          mov ax,4
  201.          jmp ret              ; springt zum nächsten RET NEAR-Befehl
  202.                               ; (vorwärts oder zurück)
  203.  
  204.  
  205.  
  206.  
  207.  
  208. -  Struktur-Definitionen können ein Basisregister haben.
  209.    Beispiel:
  210.  
  211.         BSP_STRUC[BX]
  212.             Element1 dw ?
  213.             Element2 dw ?
  214.         ENDS
  215.  
  216.         mov ax,Element1       ; wird übersetzt als 'mov ax,Element1[bx]'
  217.         mov Element2,cx       ; wird übersetzt als 'mov Element2[bx],cx'
  218.  
  219.    für andere Assembler muß das folgendermaßen kodiert werden:
  220.  
  221.         BSP_STRUC
  222.             Element1 dw ?
  223.             Element2 dw ?
  224.         ENDS
  225.  
  226.         mov ax,Element1[bx]
  227.         mov Element2[bx],cx
  228.  
  229.  
  230. -  'db'-, 'dw'- und 'dd'-Anweisungen können auch OHNE Operanden angegeben
  231.    werden.
  232.    Sie werden dann wie die entsprechenden 'LABEL BYTE'-, 'LABEL WORD'-
  233.    bzw. 'LABEL DWORD'-Anweisungen behandelt.
  234.  
  235.    Beispiel:
  236.  
  237.         ThisDWord dd
  238.         ThisWord  dw
  239.         ThisByte  db
  240.         RealByte  db 0
  241.  
  242.    entspricht den Deklarationen:
  243.  
  244.         ThisDWord LABEL DWORD
  245.         ThisWord  LABEL WORD
  246.         ThisByte  LABEL BYTE
  247.         RealByte  db 0
  248.  
  249.  
  250.  
  251.  
  252.  
  253. -  Zur Definition eines Wortes kann auch das Schlüsselwort BY verwendet
  254.    werden. BY dient zur Zusammenfassung von zwei Byte-Werten zu einem
  255.    Wort-Wert, wobei der erste Operand das Highbyte und der zweite Operand
  256.    das Lowbyte für das Wort darstellen.
  257.    Beispiel:
  258.  
  259.         Version EQU 2 BY 1
  260.  
  261.    entspricht der Definition:
  262.  
  263.         Version EQU 201h
  264.  
  265.    oder:
  266.  
  267.         TestVar EQU 'X' BY 0
  268.  
  269.    entspricht der Definition:
  270.  
  271.         TestVar EQU 5800h   
  272.  
  273.  
  274. -  Der A86 verwendet folgende Macro-Syntax:
  275.  
  276.         MACRO name_des_macros
  277.          ; Macro Text
  278.         #EM                   ; Endemarkierung für das Macro
  279.  
  280.    Parameter für das Macro können im Macro-Text über die Konstanten
  281.    #1, #2 bis #9 angesprochen werden. Die Parameter werden als Text
  282.    übergeben (nicht als Wert!).
  283.  
  284.  
  285. -  Für die bedingte Kompilierung werden folgende Schlüsselwörter benutzt:
  286.  
  287.          #IF bedingung
  288.  
  289.            ; Anweisungen, falls Bedingung TRUE
  290.  
  291.          #ELSEIF bedingung
  292.  
  293.            ; Anweisungen, falls 2. Bedingung TRUE (weitere #ELSEIFs möglich)
  294.  
  295.          #ELSE
  296.  
  297.            ; Anweisungen, falls keine vorherige Bedingung TRUE war
  298.  
  299.          #ENDIF
  300.  
  301.  
  302.  
  303.    Mögliche Bedingungen (u.a.):
  304.  
  305.    op1 LT op2  TRUE, falls der 1. Operand kleiner als der zweite Operand ist
  306.    op1 GT op2  TRUE, falls der 1. Operand kleiner als der zweite Operand ist
  307.    op1 EQ op2  TRUE, falls der 1. Operand gleich dem zweiten Operanden ist
  308.    op1 NE op2  TRUE, falls der 1. Operand nicht gleich dem zweiten Operanden ist
  309.  
  310.    Bedingungen der Form '!konstanten_name' sind TRUE, falls die Konstante
  311.    noch NICHT deklariert ist.
  312.  
  313.    Beispiel:
  314.  
  315.         #IF !ENGLISCH
  316.            db 'Deutsche Meldung'        ; Konstante Englisch ist nicht
  317.                                         ; definiert
  318.         #ELSE
  319.            db 'English message'         ; Konstante Englisch ist
  320.                                         ; definiert
  321.         #ENDIF
  322.  
  323.    Falls Anweisungen zur bedingten Kompilierung in Macros übernommen
  324.    werden sollen (d.h. sie sollen erst beim Aufruf des Macros ausgewertet
  325.    werden), müssen die Schlüsselwörter für die bedingte Kompilierung
  326.    mit zwei Nummernzeichen beginnen.
  327.  
  328.  
  329.